﻿using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using TTQT;
using TTQT.TTQT_Code;
using TTQT.TTQT_Code.Info;

public partial class QLNguoiDungCN : MasterControl// System.Web.UI.UserControl
{
    protected System.Web.UI.WebControls.RequiredFieldValidator txtEmailRequired;
    private string content = null;

    protected void Page_Load(object sender, System.EventArgs e)
    {
        //trKSV.Visible = false;
        //this.txtUserName.Enabled = false;
        lblUpdateStatus.Text = string.Empty;
        lblError.Text = string.Empty;
        if (!Page.IsPostBack)
        {
            //bindCboKSV();
            bindGridUser();
            visiblePanels(true, false, false, false);
            bindCmd();
            bindVaiTro();
            cboChiNhanh.DataBind();
            
        }
    }
    private void bindAssignedCmds()
    {

        lstQuyen2.Items.Clear();
        DataAccessObject.instance().FillToListBox(lstQuyen2.Items);

        DataTable dtGroupRoles = DataAccessObject.instance().getCmdsByUserId(int.Parse(txtID.Text.Trim()));
        string roles = "|";
        foreach (DataRow row in dtGroupRoles.Rows) roles += row["Cmd_ID"].ToString() + "|";

        int i = 0;
        while (i < lstQuyen2.Items.Count)
        {
            if (roles.IndexOf("|" + lstQuyen2.Items[i].Value + "|") < 0) lstQuyen2.Items.RemoveAt(i);
            else i += 1;
        }
    }
    private void bindAssignedRoles()
    {
        lstVaiTro2.DataSource = DataAccessObject.instance().getGroupsByUserId(int.Parse(txtID.Text.Trim()));
        lstVaiTro2.DataBind();
    }
    private void bindVaiTro()
    {
        lstVaiTro1.DataSource = DataAccessObject.instance().getAllGroupForCN(UserInfo.Brn_Code);
        lstVaiTro1.DataBind();
        if(UserInfo.Brn_Code.Equals("561") ||UserInfo.Brn_Code.Equals("990")||UserInfo.Brn_Code.Equals("310"))
        {
            lstVaiTro1.Items.Add(new ListItem("Quỹ chính kho đầu mối", "29"));
            try
            {
                lstVaiTro1.Items.RemoveAt(lstVaiTro1.Items.IndexOf(new ListItem("Quỹ chính kho chi nhánh", "24")));
            }catch{}
        }
    }
    private void bindCmd()
    {
        DataAccessObject.instance().FillToListBox(this.lstQuyen1.Items);
    }
    /*
    private void bindLstSanPham()
    {
        try
        {
            lstSanPham.DataSource = DataAccessObject.instance().getAllProductCode();
            lstSanPham.DataBind();

        }
        catch (Exception) { }
    }
    /*
    private void bindLstChiNhanh()
    {
        try
        {
            lstChiNhanh.DataSource = DataAccessObject.instance().getCNNbyTTQT(brnCode);
            lstChiNhanh.DataBind();

        }
        catch (Exception) { }
    }
    /*
    private void bindCboKSV()
    {
        try
        {
            cboKSV.DataTextField = "UserNameAndFullName";
            cboKSV.DataValueField = "User_Name";
            cboKSV.DataSource = DataAccessObject.instance().GetUserByBranchAndGroupName(brnCode, "KSVTTQT");

            cboKSV.DataBind();
        }
        catch (Exception ex)
        {
        }
    }
    */
    private void visiblePanels(bool GridUser, bool Edit, bool GanNhom, bool reset)
    {
        pnUserGrid.Visible = GridUser;
        pnEditUser.Visible = Edit;
        pnQuyen_Nhom.Visible = GanNhom;
        pnResetPassword.Visible = reset;
    }
    private void bindCboChiNhanh()
    {
        dsChiNhanh.SelectCommand = "";
        cboChiNhanh.DataSourceID = "dsChiNhanh";
        cboChiNhanh.DataBind();
    }
    private void bindGridUser()
    {
        try
        {
            dgUser.DataSource = DataAccessObject.instance().User_GetForCN(brnCode,userId);
            dgUser.DataBind();
        }
        catch (Exception ex)
        {
            string err = ex.ToString();
        }
    }
    #region Web Form Designer generated code
    override protected void OnInit(EventArgs e)
    {
        //
        // CODEGEN: This call is required by the ASP.NET Web Form Designer.
        //
        InitializeComponent();
        base.OnInit(e);
    }

    /// <summary>
    ///		Required method for Designer support - do not modify
    ///		the contents of this method with the code editor.
    /// </summary>
    private void InitializeComponent()
    {
        this.dgUser.ItemCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.dgUser_ItemCommand);
        this.dgUser.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.dgUser_ItemDataBound);

    }
    #endregion
    protected void cmdUpdate_Click(object sender, System.EventArgs e)
    {
        UserInfo obj;
        CoreDAO dao=new CoreDAO();        
        try
        {
            if (txtUserName.Text.Trim().Length < 1)
            {
                alert("Bạn chưa nhập tên đăng nhập");
                return;
            }
           
            if(txtFullName.Text.Trim().Length<1)
            {
                alert("Bạn vui lòng nhập họ tên!");
                return;
            }
        }catch{}
        try
        {
            //Nếu là thêm mới
            if (this.txtID.Text == string.Empty)
            {
				if (txtPassword.Text.Trim().Length < 1)
	            {
	                alert("Bạn chưa nhập mật khẩu");
	                return;
	            }
	            if(!txtPassword.Text.Equals(txtPassword2.Text))
	            {
	                alert("Mật khẩu nhập lại chưa đúng");
	                return;
	            }
                this.lblUpdateStatus.Text = "";
                if (DataAccessObject.instance().checkExistUser(this.txtUserName.Text))
                {
                    this.lblError.Text = "Tài khoản này đã tồn tại";
                    return;
                }
                try
                {
                    obj = new UserInfo();
                    obj.userName = this.txtUserName.Text;
                    obj.password = TTQTCommon.MD5Encrypt(this.txtPassword.Text);
                    obj.fullName = this.txtFullName.Text;
                    obj.email = this.txtEmail.Text;
                    obj.birthday = this.txtBirthday.Text;
                    obj.address = this.txtAddress.Text;
                    obj.phone = this.txtPhone.Text;
                    obj.SIBSID = "";
                    try
                    {
                        obj.Brn_Code = TTQTCommon.ToString(cboChiNhanh.SelectedValue);
                    }catch{}

                    obj.CMT = txtCMT.Text.Trim();
                    obj.MaKho = cboChiNhanh.SelectedValue;
                    obj.userId = DataAccessObject.instance().addUser(obj);
                    if (obj.userId > 0)
                    {
                        txtID.Text = obj.userId.ToString();
                        bindGridUser();
                        cmdQuyen_Click(null, null);
                        //Write an ADD NEW log to Database
                    }
                }
                catch (Exception ex)
                {
                    this.lblUpdateStatus.Text = "Lỗi cập nhật!";
                }
            }
            //Nếu là cập nhật
            else
            {
                if (!this.txtUserName.Text.Equals(Session["edittingUserName"].ToString()))
                {
                    if (DataAccessObject.instance().checkExistUser(this.txtUserName.Text))
                    {
                        lblError.Text = "Tài khoản này đã tồn tại";
                        return;
                    }
                }
                obj = DataAccessObject.instance().getUser(TTQTCommon.ToInt32(this.txtID.Text, -1));
                if (obj == null) return;
                // Cuối cùng là update bảng user
                obj.userName = this.txtUserName.Text;
                obj.password = TTQTCommon.MD5Encrypt(this.txtPassword.Text);
                obj.fullName = this.txtFullName.Text;
                obj.email = this.txtEmail.Text;
                obj.birthday = this.txtBirthday.Text;
                obj.address = this.txtAddress.Text;
                obj.phone = this.txtPhone.Text;
                try
                {
                    obj.Brn_Code = TTQTCommon.ToString(cboChiNhanh.SelectedValue);
                }catch{}

                obj.CMT = txtCMT.Text.Trim();
                obj.MaKho = cboChiNhanh.SelectedValue.Trim();
               
                if (DataAccessObject.instance().updateUser(obj) > 0)
                    lblUpdateStatus.Text = "Cập nhật thành công!";
                //bindGridUser();
                //visiblePanels(true, false, false, false);
            }
        }
        catch (Exception ex)
        {
            lblUpdateStatus.Attributes.Add("style", "color:red;font-weight:bold;");
            this.lblUpdateStatus.Text = ex.ToString();
            //Log methods here
        }
    }

    protected void cmdCancel_Click(object sender, System.EventArgs e)
    {
        bindGridUser();
        this.lblUpdateStatus.Text = "";
        visiblePanels(true, false, false, false);
        this.pnQuyen_Nhom.Visible = false;
    }

    private void WriteLog(string sType, string sContent)
    {
        string str_ip = Request.UserHostAddress;
        LogInfo o_log = new LogInfo(str_ip, userName, sType, sContent, "", this.brnCode);
        DataAccessObject.instance().addLog(o_log);
    }

    private void dgUser_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
        //trPass.Visible = false;
        UserInfo obj = null;
        if (e.CommandName == "cmdLock")
        {
            try
            {
                CoreDAO dao =new CoreDAO();
                dao.lock_UnlockUserAndMaKho(e.Item.Cells[3].Text,e.Item.Cells[5].Text);
                bindGridUser();
            }catch(Exception ebc)
            {
                
            }
        }
        if (e.CommandName == "cmdEdit")
        {
            cmdQuyen.Visible = isKT3();
            obj = DataAccessObject.instance().getUser(int.Parse(e.Item.Cells[0].Text));
            Session["EdittingUserName"] = obj.userName;
            this.txtID.Text = obj.userId.ToString();
            this.txtUserName.Text = obj.userName;
            this.txtUserName.Enabled = false;
            this.txtPassword.Text = "";
            trPass1.Visible = false;
            trPass2.Visible = false;
            this.txtFullName.Text = obj.fullName;
            this.txtEmail.Text = obj.email;
            this.txtBirthday.Text = obj.birthday;
            this.txtAddress.Text = obj.address;
            this.txtPhone.Text = obj.phone;
            
            txtCMT.Text = obj.CMT;
            try
            {
                cboChiNhanh.SelectedValue = obj.Brn_Code;
            }catch{}
            
            visiblePanels(false, true, false, false);
            cmdQuyen.Visible = true;
            cboChiNhanh.Enabled = false;
        }
        else if (e.CommandName == "cmdReset")
        {
            obj = DataAccessObject.instance().getUser(int.Parse(e.Item.Cells[0].Text));
            this.txtIdReset.Text = obj.userId.ToString();
            lblTenDangnhap.Text = obj.userName;
            visiblePanels(false, false, false, true);
        }
        else if (e.CommandName == "cmdDelete")
        {
            try
            {
                UserInfo oCurrentUser = DataAccessObject.instance().getUser(int.Parse(e.Item.Cells[0].Text));
                if (DataAccessObject.instance().kiemTraPhatSinhGiaoDich(oCurrentUser.userName)>0)
                {
                    MyWebUtils.MyWebUtil.alert(this.Page,"GDV này đã phát sinh giao dịch xuất/nhập nên không xóa được.");
                    return;
                }
                DataAccessObject.instance().deleteUser(int.Parse(e.Item.Cells[0].Text));
                //DataAccessObject.instance().removeUserFromGroup()
                if (isTTQT)
                {
                    DataAccessObject.instance().removeUserFromGroup(oCurrentUser.userId, oCurrentUser.groupId);
                }
                bindGridUser();
                //Write a Delete log to Log Table
                WriteLog("log_XoaNguoiDung", "Xóa người dùng" + oCurrentUser.userName);
            }
            catch (Exception ex) { }
        }
    }

    private void fillListPagesByGroupId(int groupId)
    {
        lstQuyen.Items.Clear();
        // Trước hết cứ lấy hết các quyền đưa vào ListBox lstQuyen. Sau đó loại những quyền không hợp lệ
        DataAccessObject.instance().FillToListBox(lstQuyen.Items);

        // DataTable này chứa id của tất cả các chức năng mà nhóm này có quyền truy xuất
        DataTable dtGroupRoles = DataAccessObject.instance().getCmdsByGroupId(groupId);
        // roles là chuỗi chứa các id của các quyền mà nhóm này có quyền truy xuất.
        // roles có dạng |1|3|5|7|8|9|12|24|
        string roles = "|";
        foreach (DataRow row in dtGroupRoles.Rows) roles += row["Cmd_ID"].ToString() + "|";
        int i = 0;
        // Duyệt lại danh sách các quyền đã lấy ban đầu, cái nào không có trong roles thì loại bỏ
        while (i < lstQuyen.Items.Count)
        {
            if (roles.IndexOf("|" + lstQuyen.Items[i].Value + "|") < 0) lstQuyen.Items.RemoveAt(i);
            else i += 1;
        }
    }

    private void dgUser_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
    {
        try
        {
            ImageButton cmdLock = (ImageButton)e.Item.FindControl("cmdLock");
            if(null!=cmdLock)
            {
                if (e.Item.Cells[5].Text.Equals("0"))
                {
                    cmdLock.ImageUrl = "../images/active0.png";
                }
                if (e.Item.Cells[5].Text.Equals("1"))
                {
                    cmdLock.ImageUrl = "../images/active1.png";
                }
            }
        }
        catch (Exception exx)
        {
            
        }
        try
        {
            Button cmdDel = (Button)e.Item.FindControl("cmdDelete");
            if (cmdDel != null) cmdDel.Attributes.Add("onclick", "delete_Confirm");
        }
        catch (Exception ex)
        {
        }
        try
        {
            if (e.Item.Cells[2].Text.IndexOf(",quychinhphonggiaodich,")>=0)
            {
                e.Item.Cells[2].Text = e.Item.Cells[2].Text.Replace(",quychinhphonggiaodich,",",quyphuphonggiaodich,");
            }
            //fdàà
        }catch(Exception exx)
        {
            
        }
    }

    protected void cmdAddUser_Click(object sender, System.EventArgs e)
    {
        cboChiNhanh.Enabled = true;        
        trPass1.Visible = true;
        trPass2.Visible = true;
        cmdQuyen.Visible = false;
        //bindCboKSV();
        //trPass.Visible = true;
        this.txtID.Text = string.Empty;
        visiblePanels(false, true, false, false);
        try
        {
            this.txtID.Text = "";
            this.txtUserName.Text = "";
            this.txtUserName.Enabled = true;
            this.txtPassword.Text = "";
            this.txtFullName.Text = "";
            this.txtEmail.Text = "";
            this.txtBirthday.Text = "";
            this.txtAddress.Text = "";
            this.txtPhone.Text = "";
        }
        catch (Exception) { }
        visiblePanels(false, true, false, false);
    }

    protected void cmdUyQuyen_Click(object sender, System.EventArgs e)
    {
        visiblePanels(false, false, true, false);
    }

    protected void btnQuayLai_Click(object sender, System.EventArgs e)
    {
        visiblePanels(false, true, false, false);
        pnQuyen_Nhom.Visible = false;
    }


    protected void btnBack_Click(object sender, System.EventArgs e)
    {
        this.lblUpdateStatus.Text = "";
        visiblePanels(true, false, false, false);
    }

    protected void btnReset_Click(object sender, System.EventArgs e)
    {
        if (txtPassReset.Text.Trim().Length == 0)
        {
            alert("Mat khau khong duoc de trong!");
            return;
        }
        if (!txtPassReset.Text.Equals(txtPassReset2.Text))
        {
            alert("Mat khau khong khop!");
            return;
        }
        UserInfo obj = DataAccessObject.instance().getUser(int.Parse(txtIdReset.Text.Trim()));
        if (null != obj)
        {
            obj.password = TTQTCommon.MD5Encrypt(txtPassReset.Text.Trim());
            if (DataAccessObject.instance().resetPassword(lblTenDangnhap.Text,obj.password) > 0)
            {
                lblResetPassword.Text = "Doi password thanh cong!";
                lblResetPassword.Visible = true;
                //Ghi log
            }
        }
    }
    public bool isKT3()
    {
        if (brnCode.Trim().Equals("0")) return true;
        else return false;
    }

    protected void btnAddVaiTro_Click(object sender, System.EventArgs e)
    {
        //Bat loi phan quyen. Khong cho phan quyen TTV o CN, khong cho phan quyen quychinh o PGD
        if(lstVaiTro1.SelectedValue.Equals("16")) //GDV
        {
            
            if(cboChiNhanh.SelectedValue.Equals(UserInfo.Brn_Code))
            {
                MyWebUtils.MyWebUtil.alert(this.Page, "CN không được tạo user GDV, muốn tạo GDV phải tạo ở PGD");
                return;
            }
        }
        if(lstVaiTro1.SelectedValue.Equals("24")) //QuyChinh
        {
            if (!cboChiNhanh.SelectedValue.Equals(UserInfo.Brn_Code))
            {
                MyWebUtils.MyWebUtil.alert(this.Page, "Không được tạo user quỹ chính ở PGD. Chỉ được phép tạo quỹ chính cho kho CN");
                return;
            }

        }
        if(lstVaiTro2.Items.Count>0)
        {
            MyWebUtils.MyWebUtil.alert(this.Page, "Hiện tại chương trình không cho phép một người được nhận nhiều vai trò");
            return;
        }
        try
        {
            foreach (ListItem item in this.lstVaiTro1.Items)
            {
                if (item.Selected)
                {
                    DataAccessObject.instance().addRoleToUser(int.Parse(item.Value.Trim()), int.Parse(txtID.Text.Trim()));
                    DataAccessObject.instance().MaKho_DongBo_SauKhiPhanQuyen(false,int.Parse(item.Value.Trim()), int.Parse(txtID.Text.Trim()));
                    // Write a Role Adding log to Log Table
                    //WriteLog(TTQTCommon.ToInt32(Session["UserId"],-1),"Thêm quyền của nhóm người dùng ("+lblGroupName.Text+")",item.Text.Replace('.',' ').Trim(),"");
                }
            }
            lblUpdateStatus.Text = "Cập nhật thành công!";
        }
        catch (Exception ex)
        {
            //
            string fdsa = ex.ToString();
            //
            lblUpdateStatus.Text = "Có lỗi khi cập nhật! Bạn vui lòng kiểm tra lại!";
        }
        bindAssignedRoles();
    }

    protected void cmdQuyen_Click(object sender, System.EventArgs e)
    {
        pnQuyen_Nhom.Visible = true;
        bindAssignedRoles();
        bindAssignedCmds();
        visiblePanels(false, false, true, false);
    }
    protected void btnRemoveVaiTro_Click(object sender, System.EventArgs e)
    {
        try
        {
            foreach (ListItem item in lstVaiTro2.Items)
                if (item.Selected)
                {
                    DataAccessObject.instance().removeRoleFromUser(TTQTCommon.ToInt32(item.Value, 0), int.Parse(txtID.Text.Trim()));
                    DataAccessObject.instance().MaKho_DongBo_SauKhiPhanQuyen(true, int.Parse(item.Value.Trim()), int.Parse(txtID.Text.Trim()));
                    // Write a Role Removing log to Log Table
                    //WriteLog (TTQTCommon.ToInt32(Session["UserId"],-1),"Bớt quyền của nhóm người dùng ("+ lblGroupName.Text+")",item.Text.Replace('.',' ').Trim(),"");
                }
            lblUpdateStatus.Text = "Cập nhật thành công!";
        }
        catch (Exception ex)
        {
            lblUpdateStatus.Text = "Có lỗi khi cập nhật! Bạn vui lòng kiểm tra lại!";
        }
        bindAssignedRoles();
    }

    protected void btnAddQuyen_Click(object sender, System.EventArgs e)
    {

        try
        {
            foreach (ListItem item in this.lstQuyen1.Items)
            {
                if (item.Selected)
                {
                    DataAccessObject.instance().addCmdToUser(int.Parse(item.Value.Trim()), int.Parse(txtID.Text.Trim()));
                    // Write a Role Adding log to Log Table
                    //WriteLog(TTQTCommon.ToInt32(Session["UserId"],-1),"Thêm quyền của nhóm người dùng ("+lblGroupName.Text+")",item.Text.Replace('.',' ').Trim(),"");
                }
            }
            lblUpdateStatus.Text = "Cập nhật thành công!";
        }
        catch (Exception ex)
        {
            //
            string fdsa = ex.ToString();
            //
            lblUpdateStatus.Text = "Có lỗi khi cập nhật! Bạn vui lòng kiểm tra lại!";
        }
        bindAssignedCmds();
    }

    protected void btnRemoveQuyen_Click(object sender, System.EventArgs e)
    {
        try
        {
            foreach (ListItem item in lstQuyen2.Items)
                if (item.Selected)
                {
                    DataAccessObject.instance().removeCmdFromUser(TTQTCommon.ToInt32(item.Value, 0), int.Parse(txtID.Text.Trim()));
                    // Write a Role Removing log to Log Table
                    //WriteLog (TTQTCommon.ToInt32(Session["UserId"],-1),"Bớt quyền của nhóm người dùng ("+ lblGroupName.Text+")",item.Text.Replace('.',' ').Trim(),"");
                }

            lblUpdateStatus.Text = "Cập nhật thành công!";
        }
        catch (Exception ex)
        {
            lblUpdateStatus.Text = "Có lỗi khi cập nhật! Bạn vui lòng kiểm tra lại!";
        }
        bindAssignedCmds();
    }

    private void alert(string noiDung)
    {
        Page.ClientScript.RegisterClientScriptBlock(System.Type.EmptyTypes.GetType(), "focusElement", @"<script>
             alert('" + noiDung + @"');             
          </script>");
    }
    protected void Button5_Click(object sender, EventArgs e)
    {
        this.lblUpdateStatus.Text = "";
        visiblePanels(true, false, false, false);
        bindGridUser();
    }  
}
